package test.n00400;


import java.util.*;

import static utils.Tools.listOf;

public class Problem00490 {
    public static void main(String[] args) {
        println(new String[]{"eat", "tea", "tan", "ate", "nat", "bat"});
    }

    public static void println(String[] strs) {
        Solution ss = new Solution();
        System.out.println(listOf(strs) + "," + listOf(ss.groupAnagrams(strs)));
    }

    public static class Solution {

        /**
         * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
         *
         * 字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。
         *
         * 来源：力扣（LeetCode）
         * 链接：https://leetcode.cn/problems/group-anagrams
         * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
         *
         * @param strs
         * @return
         */
        public List<List<String>> groupAnagrams(String[] strs) {
            Map<String, List<String>> map = new HashMap<>();
            for (String str : strs) {
                final char[] chars = str.toCharArray();
                Arrays.sort(chars);
                String key = new String(chars);
                final List<String> list = map.getOrDefault(key, new ArrayList<>());
                list.add(str);
                map.put(key, list);
            }
            return new ArrayList<>(map.values());
        }
    }
}
